home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Reference Guide / C-C++ Interactive Reference Guide.iso / c_ref / csource4 / 280_01 / unrot.c < prev    next >
Text File  |  1989-01-13  |  2KB  |  107 lines

  1. /* [UNROT.C of JUGPDS Vol.46]*/
  2. /*
  3. *****************************************************************
  4. *                                *
  5. *    Written by  Hakuo Katayose (JUG-CP/M No.179)        *
  6. *            49-114 Kawauchi-Sanjuunin-machi        *
  7. *            Sendai, Miyagi 980                          *
  8. *            Phone: 0222-61-3219                *
  9. *                                *
  10. *       Modifird by Toshiya Oota   (JUG-CPM No.10)              *
  11. *                   Sakae ko-po 205                 *
  12. *            5-19-6 Hosoda                *
  13. *            Katusikaku Tokyo 124            *
  14. *                                *
  15. *        for MS-DOS Lattice C V3.1J & 80186/V20/V30    *
  16. *                                *
  17. *    Compiler Option: -ccu -k0(1) -ms -n -v -w        *
  18. *                                *
  19. *    Edited & tested by Y. Monma (JUG-CP/M Disk Editor)    *
  20. *            &  T. Ota   (JUG-CP/M Sub Disk Editor)    *
  21. *                                *
  22. *****************************************************************
  23. */
  24.  
  25. #include "stdio.h"
  26. #include "dos.h"
  27. #include "tools.h"
  28. #include "toolfunc.h"
  29.  
  30. #define    FOLD    36
  31. #define    MAXOUT    80
  32. #define    MIDDLE    40
  33.  
  34. char fold;
  35.  
  36. void putlin();
  37.  
  38. void main(argc, argv)
  39. int    argc;
  40. char     **argv;
  41. {
  42. int    i, j;
  43. char    inbuf[MAXLINE], outbuf[MAXOUT+1];
  44. char    *ap;
  45.  
  46.     fold = FOLD;
  47.     while (--argc > 0) {
  48.     if ((*++argv)[0] == '-')
  49.         for (ap = (*argv)+1; *ap != NULL; ap++) {
  50.         if (tolower(*ap) == 'f') {
  51.             if(*(ap+1) != NULL)
  52.             fold = *(++ap);
  53.             else 
  54.             error("UNR901 Do specify FOLD char");
  55.         }
  56.         else
  57.             error("UNR999 Usage: unrot [-fFOLD] <infile >outfile");
  58.         }
  59.     }
  60.     while (getlin(inbuf, MAXLINE) > 0) {
  61.     for (i = 0; i < MAXOUT; i++)
  62.         outbuf[i] = BLANK;
  63.     j = MIDDLE;
  64.     for (i = 0; inbuf[i] != fold && inbuf[i] != NEWLINE; i++) {
  65.         j++;
  66.         outbuf[i] = BLANK;
  67.         if (j >= MAXOUT - 1)
  68.         j = 0;
  69.         outbuf[j] = inbuf[i];
  70.     }
  71.     if (inbuf[i] == fold) {
  72.         j = MIDDLE;
  73.         for (i = index(inbuf, NEWLINE) - 1; i > 0; i--) {
  74.         if (inbuf[i] == fold)
  75.             break;
  76.         if (--j < 0)
  77.             j = MAXOUT - 2;
  78.         outbuf[j] = inbuf[i];
  79.         }
  80.     }
  81.     for (i = MAXOUT - 2; i > 0; i--)
  82.         if (inbuf[i] != BLANK)
  83.         break;
  84.         outbuf[i + 1] = NEWLINE;
  85.         outbuf[i + 2] = EOS;
  86.         putlin(outbuf);
  87.     }
  88. }
  89.  
  90. void putlin(buf)
  91. char *buf;
  92. {
  93.     while (*buf)
  94.     putchar(*buf++);
  95. }
  96.  
  97. int index(str, c)
  98. char    *str;
  99. int    c;
  100. {
  101. int    i;
  102.  
  103.     for (i = 0; *str && *str != c; i++ )
  104.     *str++;
  105.     return ( *str ? i : ERROR);
  106. }
  107.